package com.qf.limit.commons.r;

import lombok.Data;
import lombok.experimental.Accessors;

import java.io.Serializable;

@Data
@Accessors(chain = true)
public class R<T> implements Serializable {
    /**
     * 响应码
     */
    //404
    private Integer code;

    /**
     * 响应内容
     */
    //访问不到该页面
    private String msg;

    /**
     * 响应数据
     */
    //
    private T data;

    /**
     * 生成一个代表成功的R对象
     * @param data
     * @param <S>
     * @return
     */
    public static <S> R<S> succ(S data){
        return new R<S>().setCode(Codes.SUCC.getCode())
                .setMsg(Codes.SUCC.getMsg())
                .setData(data);
    }

    /**
     * 生成一个代表成功的R对象，不带数据类型的
     * @param <S>
     * @return
     */
    public static <S> R<S> succ(){
        return succ(null);
    }

    /**
     * 生成一个失败的R对象，不带数据的
     * @param <S>
     * @return
     */
    public static <S> R<S> fail(Codes code){
        return fail(code,null);
    }

    /**
     * 生成一个失败的R对象 带数据
     * @param data
     * @param <S>
     * @return
     */
    public static <S> R<S> fail(Codes code, S data){
        return new R<S>()
                .setCode(code.getCode())
                .setMsg(code.getMsg())
                .setData(data);
    }

}
